9-3 瑋N虒`

本節針對 Cookie 的技術層次加以說明,以讓同學對 Cookie 有更深一步的瞭解。

Cookie 的概念是由 Netscape 公司首先發展出來,其主要目的是要克服 HTTP protocal 的「無狀態」(Stateless)特性。換句話說,Cookie 的目的就是要記錄使用者之前在網頁上的行為,以便於當使用者回到同一個網頁時,有些相關的紀錄可循。

Hint
所謂的「Stateless」,是指在處理每一個用戶送來的 Request,伺服器並沒有任何紀錄之前是否有相關的 Request(Log 檔案除外),因此伺服器很難對用戶端進行瀏覽行為的紀錄和追蹤。

Netscape 公司所設計的 Cookie,是經由 HTTP 的表頭資訊(Header)來傳送,說明如下:

舉例來說,一個標準的 HTTP Response Header 如下:
HTTP/1.0 200 OK
Date: Tuesday, 09-Nov-99 20:58:25 GMT
Server: Open-Market-Secure-WebServer/2.0.5.RC0
MIME-version: 1.0
Security-Scheme: S-HTTP/1.1
Set-Cookie: USER=4wOm1zd2VlbmV5MTk5OQ; 
     Path=/; Domain=.site.com; expires=Wed, 
	 01-Jan-2031 01:01:01 GMT
在上例中,「Set-Cookie:」指定了要下載至使用者端的 Cookie 元素。

一般在使用瀏覽器,使用者是看不到這些表頭資訊的,若要看到這些資訊,可以使用 telnet,例如,請在 DOS 視窗輸入下列文字:

telnet neural.cs.nthu.edu.tw 80 按下 Enter 鍵後,接著輸入下列文字: HEAD /jang/ HTTP/1.0 (你可能看不到輸入的文字,但是這並不會影響結果。)其中的 HEAD,代表只抓取表頭資訊。輸入完畢後,記得要按「兩次」Enter 鍵,就可以取得一般瀏覽器在顯示我的首頁時,伺服器所回傳的表頭資訊: HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Mon, 30 Oct 2006 05:54:00 GMT Connection: Keep-Alive Content-Length: 7179 Content-Type: text/html Set-Cookie: ASPSESSIONIDQCBCCDTA=AKHDJFHCGGDPDMNAHONKMPEN; path=/ Cache-control: private 如果要取得「Web程式設計、技術與應用」首頁的完整資訊,可以輸入下列文字: GET /jang/books/JavaScript/ HTTP/1.0 其中的 GET,代表抓取完整資訊。按下兩次 Enter 鍵後,傳回的資訊如下: Server: Microsoft-IIS/5.0 Date: Mon, 30 Oct 2006 05:56:31 GMT Connection: Keep-Alive Content-Length: 8967 Content-Type: text/html Set-Cookie: ASPSESSIONIDQCBCCDTA=DLHDJFHCAGGLFCEOJCIBEJLN; path=/ Cache-control: private <html> <head> <title>JavaScript 程式設計與應用</title> <LINK TYPE="text/css" REL="stylesheet" HREF="common/my.css"> </head> <body> <font face="helvetica,arial"> <h2 align=center class=txtH1>JavaScript 程式設計與應用</h2> <h3 align=center class=txtH2>by <a href="http://www.cs.nthu.edu.tw/~jang">張智星 </a></h3> <hr> ... 我們可以將 Cookie 的設定分為兩部分:
  1. 由伺服器直接對用戶進行設定:此部分的 Cookie 資訊就是直接放在由伺服器回傳的表頭,如前所述。有關這方面的細節,我們會在 ASP 相關章節加以說明。
  2. 由用戶端的 JavaScript 進行設定:此部分是經由用戶端的 JavaScript 來進行設定,請見本章第一節及第二節的說明。。
另外,當瀏覽器對伺服器索取網頁時,也會帶著表頭資訊,稱為 HTTP Requst Header,這部分也會包含與此網頁相關的 Cookie 的資訊,所以伺服器端也可以立刻知道與此網頁相關的 Cookie 資訊,例如之前的拜訪次數或購買項目,等等。因此我們可以對 Cookie 對網頁的作用總結如下: 詳細流程可見此「example/Cookie設定流程說明.ppt」。

Example(Cookie設定流程說明.ppt):

Hint
有關 Request 及 Response,會在 ASP 相關章節進行說明。


JavaScript 程式設計與應用:用於網頁用戶端